GtkPixelCache: Add debug feature to track redraws
authorAlexander Larsson <alexl@redhat.com>
Thu, 2 May 2013 09:47:06 +0000 (11:47 +0200)
committerAlexander Larsson <alexl@redhat.com>
Tue, 7 May 2013 14:34:05 +0000 (16:34 +0200)
Each time we redraw we tint it in a different color so that
you can see which regions are redrawn.

gtk/gtkdebug.h
gtk/gtkmain.c
gtk/gtkpixelcache.c

index d4ee6f03cf8ebb4ea4c956de85223cb88476fdf0..d98c1974a0333ad49462f7abfe102749a8bb148c 100644 (file)
@@ -49,7 +49,8 @@ typedef enum {
   GTK_DEBUG_BUILDER         = 1 << 11,
   GTK_DEBUG_SIZE_REQUEST    = 1 << 12,
   GTK_DEBUG_NO_CSS_CACHE    = 1 << 13,
-  GTK_DEBUG_BASELINES       = 1 << 14
+  GTK_DEBUG_BASELINES       = 1 << 14,
+  GTK_DEBUG_PIXEL_CACHE     = 1 << 15
 } GtkDebugFlag;
 
 #ifdef G_ENABLE_DEBUG
index 4a5c7af479adbbc5eed5fc3e9e913ad303f3138a..47c5457d4fcca02a01faf99a698b3a289ce90775 100644 (file)
@@ -172,7 +172,8 @@ static const GDebugKey gtk_debug_keys[] = {
   {"builder", GTK_DEBUG_BUILDER},
   {"size-request", GTK_DEBUG_SIZE_REQUEST},
   {"no-css-cache", GTK_DEBUG_NO_CSS_CACHE},
-  {"baselines", GTK_DEBUG_BASELINES}
+  {"baselines", GTK_DEBUG_BASELINES},
+  {"pixel-cache", GTK_DEBUG_PIXEL_CACHE}
 };
 #endif /* G_ENABLE_DEBUG */
 
index 1a8630819ca09c255a928e4baa2f2d1c2eab0ae5..91b9d8fb26c3751c819b7c7c92597798ddd84f0b 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "config.h"
 
+#include "gtkdebug.h"
 #include "gtkpixelcacheprivate.h"
 
 /* The extra size of the offscreen surface we allocate
@@ -289,7 +290,27 @@ _gtk_pixel_cache_repaint (GtkPixelCache *cache,
 
       cairo_set_operator (backing_cr, CAIRO_OPERATOR_OVER);
 
+      cairo_save (backing_cr);
       draw (backing_cr, user_data);
+      cairo_restore (backing_cr);
+
+#ifdef G_ENABLE_DEBUG
+      if (gtk_get_debug_flags () & GTK_DEBUG_PIXEL_CACHE)
+       {
+         GdkRGBA colors[] = {
+           { 1, 0, 0, 0.08},
+           { 0, 1, 0, 0.08},
+           { 0, 0, 1, 0.08},
+           { 1, 0, 1, 0.08},
+           { 1, 1, 0, 0.08},
+           { 0, 1, 1, 0.08},
+         };
+         static int current_color = 0;
+
+         gdk_cairo_set_source_rgba (backing_cr, &colors[(current_color++) % G_N_ELEMENTS (colors)]);
+         cairo_paint (backing_cr);
+       }
+#endif
 
       cairo_destroy (backing_cr);
     }